From: Marco Trevisan (TreviƱo) Date: Fri, 31 Oct 2025 04:00:35 +0000 (+0100) Subject: overviewControls: Disconnect signals on destruction X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~66^2^2~17 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=1f10aad5901a2883a0c454d83d1e6bb00691821d;p=gnome-shell.git overviewControls: Disconnect signals on destruction While we are not getting errors and the ControlsManger is normally always alive, during destruction we could still get events from other objects that are still alive, so disconnect them all Part-of: (cherry picked from commit 741c6733eadcd8f2c4fe6e34afe2143688be805f) --- diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js index bea078c2d..355d4f6d6 100644 --- a/js/ui/overviewControls.js +++ b/js/ui/overviewControls.js @@ -51,7 +51,8 @@ class ControlsManagerLayout extends Clutter.LayoutManager { this._cachedWorkspaceBoxes = new Map(); this._postAllocationCallbacks = []; - stateAdjustment.connect('notify::value', () => this.layout_changed()); + stateAdjustment.connectObject('notify::value', + () => this.layout_changed(), this); this._workAreaBox = new Clutter.ActorBox(); global.display.connectObject( @@ -346,14 +347,14 @@ class ControlsManager extends St.Widget { this._searchController = new SearchController.SearchController( this._searchEntry, this.dash.showAppsButton); - this._searchController.connect('notify::search-active', this._onSearchChanged.bind(this)); + this._searchController.connectObject('notify::search-active', + () => this._onSearchChanged(), this); - Main.layoutManager.connect('monitors-changed', () => { - this._thumbnailsBox.setMonitorIndex(Main.layoutManager.primaryIndex); - }); + Main.layoutManager.connectObject('monitors-changed', () => + this._thumbnailsBox.setMonitorIndex(Main.layoutManager.primaryIndex), this); this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox( this._workspaceAdjustment, Main.layoutManager.primaryIndex); - this._thumbnailsBox.connect('notify::should-show', () => { + this._thumbnailsBox.connectObject('notify::should-show', () => { this._thumbnailsBox.show(); this._thumbnailsBox.ease_property('expand-fraction', this._thumbnailsBox.should_show ? 1 : 0, { @@ -361,7 +362,7 @@ class ControlsManager extends St.Widget { mode: Clutter.AnimationMode.EASE_OUT_QUAD, onComplete: () => this._updateThumbnailsBox(), }); - }); + }, this); this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay( this, @@ -385,8 +386,8 @@ class ControlsManager extends St.Widget { this.dash, this._stateAdjustment); - this.dash.showAppsButton.connect('notify::checked', - this._onShowAppsButtonToggled.bind(this)); + this.dash.showAppsButton.connectObject('notify::checked', + () => this._onShowAppsButtonToggled(), this); Main.ctrlAltTabManager.addGroup( this.appDisplay, @@ -415,7 +416,7 @@ class ControlsManager extends St.Widget { this._a11ySettings = new Gio.Settings({schema_id: A11Y_SCHEMA}); this._lastOverlayKeyTime = 0; - global.display.connect('overlay-key', () => { + global.display.connectObject('overlay-key', () => { if (this._a11ySettings.get_boolean('stickykeys-enable')) return; @@ -434,7 +435,7 @@ class ControlsManager extends St.Widget { this._shiftState(Meta.MotionDirection.UP); else Main.overview.toggle(); - }); + }, this); // connect_after to give search controller first dibs on the event global.stage.connect_after('key-press-event', (actor, event) => {